home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / WarpQuake / Src / vgamodes.h < prev    next >
C/C++ Source or Header  |  2000-05-22  |  15KB  |  600 lines

  1. /*
  2. Copyright (C) 1996-1997 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20. //
  21. // vgamodes.h: VGA mode set tables
  22. //
  23.  
  24. #include "vregset.h"
  25.  
  26. int        VGA_InitMode (viddef_t *vid, vmode_t *pcurrentmode);
  27. void    VGA_SwapBuffers (viddef_t *vid, vmode_t *pcurrentmode, vrect_t *rects);
  28. void    VGA_SetPalette (viddef_t *vid, vmode_t *pcurrentmode,
  29.                         unsigned char *pal);
  30.  
  31. ///////////////////////////////////////////////////////////////////////////
  32. // the following base mode descriptors plus extra data together provide all
  33. // the data needed to do VGA mode sets
  34. ///////////////////////////////////////////////////////////////////////////
  35.  
  36. typedef struct {
  37.     int        vidbuffer;
  38.     int        *pregset;
  39. } vextra_t;
  40.  
  41. int    vrsnull[] = {
  42.     VRS_END,
  43. };
  44.  
  45. int vrs320x200x256planar[] = {
  46. //
  47. // switch to linear, non-chain4 mode
  48. //
  49.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  50.     VRS_BYTE_OUT, SC_DATA,  1,
  51.  
  52.     VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  53.     VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  54.     VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  55.     VRS_BYTE_RMW, GC_DATA, ~0x13, 0x00,
  56.     VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  57.     VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  58.  
  59.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  60.     VRS_BYTE_OUT, SC_DATA,  3,
  61.  
  62. //
  63. // change the CRTC from doubleword to byte mode
  64. //
  65.     VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  66.     VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  67.     VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  68.     VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  69.  
  70.     VRS_END,
  71. };
  72.  
  73. int vrs360x200x256planar[] = {
  74. //
  75. // switch to linear, non-chain4 mode
  76. //
  77.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  78.     VRS_BYTE_OUT, SC_DATA,  1,
  79.  
  80.     VRS_WORD_OUT, SC_INDEX, 0x0604,
  81.     VRS_BYTE_OUT, MISC_OUTPUT, 0x67,
  82.  
  83.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  84.     VRS_BYTE_OUT, SC_DATA,  3,
  85.  
  86. //
  87. // unprotect CRTC0 through CRTC0
  88. //
  89.     VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  90.     VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  91.  
  92. //
  93. // change the CRTC from doubleword to byte mode
  94. //
  95.     VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  96.     VRS_BYTE_RMW, CRTC_DATA,  ~0x40, 0x00,
  97.     VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  98.     VRS_BYTE_RMW, CRTC_DATA,  ~0x00, 0x40,
  99.  
  100. //
  101. // set up the CRT Controller
  102. //
  103.     VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  104.     VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  105.     VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  106.     VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  107.     VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  108.     VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  109.     VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  110.  
  111.     VRS_END,
  112. };
  113.  
  114. int vrs320x240x256planar[] = {
  115. //
  116. // switch to linear, non-chain4 mode
  117. //
  118.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  119.     VRS_BYTE_OUT, SC_DATA,  1,
  120.  
  121.     VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  122.     VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  123.     VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  124.     VRS_BYTE_RMW, GC_DATA, ~0x13, 0x00,
  125.     VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  126.     VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  127.  
  128.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  129.     VRS_BYTE_OUT, SC_DATA,  3,
  130.  
  131. //
  132. // unprotect CRTC0 through CRTC0
  133. //
  134.     VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  135.     VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  136.  
  137. //
  138. // set up the CRT Controller
  139. //
  140.     VRS_WORD_OUT, CRTC_INDEX, 0x0D06,
  141.     VRS_WORD_OUT, CRTC_INDEX, 0x3E07,
  142.     VRS_WORD_OUT, CRTC_INDEX, 0x4109,
  143.     VRS_WORD_OUT, CRTC_INDEX, 0xEA10,
  144.     VRS_WORD_OUT, CRTC_INDEX, 0xAC11,
  145.     VRS_WORD_OUT, CRTC_INDEX, 0xDF12,
  146.     VRS_WORD_OUT, CRTC_INDEX, 0x0014,
  147.     VRS_WORD_OUT, CRTC_INDEX, 0xE715,
  148.     VRS_WORD_OUT, CRTC_INDEX, 0x0616,
  149.     VRS_WORD_OUT, CRTC_INDEX, 0xE317,
  150.  
  151.     VRS_END,
  152. };
  153.  
  154. int vrs360x240x256planar[] = {
  155. //
  156. // switch to linear, non-chain4 mode
  157. //
  158.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  159.     VRS_BYTE_OUT, SC_DATA,  1,
  160.  
  161.     VRS_WORD_OUT, SC_INDEX, 0x0604,
  162.     VRS_BYTE_OUT, MISC_OUTPUT, 0xE7,
  163.  
  164.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  165.     VRS_BYTE_OUT, SC_DATA,  3,
  166.  
  167. //
  168. // unprotect CRTC0 through CRTC0
  169. //
  170.     VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  171.     VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  172.  
  173. //
  174. // set up the CRT Controller
  175. //
  176.     VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  177.     VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  178.     VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  179.     VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  180.     VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  181.     VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  182.     VRS_WORD_OUT, CRTC_INDEX, 0x0D06,
  183.     VRS_WORD_OUT, CRTC_INDEX, 0x3E07,
  184.     VRS_WORD_OUT, CRTC_INDEX, 0x4109,
  185.     VRS_WORD_OUT, CRTC_INDEX, 0xEA10,
  186.     VRS_WORD_OUT, CRTC_INDEX, 0xAC11,
  187.     VRS_WORD_OUT, CRTC_INDEX, 0xDF12,
  188.     VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  189.     VRS_WORD_OUT, CRTC_INDEX, 0x0014,
  190.     VRS_WORD_OUT, CRTC_INDEX, 0xE715,
  191.     VRS_WORD_OUT, CRTC_INDEX, 0x0616,
  192.     VRS_WORD_OUT, CRTC_INDEX, 0xE317,
  193.  
  194.     VRS_END,
  195. };
  196.  
  197. int vrs320x350x256planar[] = {
  198. //
  199. // switch to linear, non-chain4 mode
  200. //
  201.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  202.     VRS_BYTE_OUT, SC_DATA,  1,
  203.  
  204.     VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  205.     VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  206.     VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  207.     VRS_BYTE_RMW, GC_DATA, ~0x10, 0x00,
  208.     VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  209.     VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  210.     VRS_BYTE_OUT, MISC_OUTPUT, 0xA3,    // 350-scan-line scan rate
  211.  
  212.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  213.     VRS_BYTE_OUT, SC_DATA,  3,
  214.  
  215. //
  216. // unprotect CRTC0 through CRTC0
  217. //
  218.     VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  219.     VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  220.  
  221. //
  222. // stop scanning each line twice
  223. //
  224.     VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  225.     VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  226.  
  227. //
  228. // change the CRTC from doubleword to byte mode
  229. //
  230.     VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  231.     VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  232.     VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  233.     VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  234.  
  235. //
  236. // set the vertical counts for 350-scan-line mode
  237. //
  238.     VRS_WORD_OUT, CRTC_INDEX, 0xBF06,
  239.     VRS_WORD_OUT, CRTC_INDEX, 0x1F07,
  240.     VRS_WORD_OUT, CRTC_INDEX, 0x8310,
  241.     VRS_WORD_OUT, CRTC_INDEX, 0x8511,
  242.     VRS_WORD_OUT, CRTC_INDEX, 0x5D12,
  243.     VRS_WORD_OUT, CRTC_INDEX, 0x6315,
  244.     VRS_WORD_OUT, CRTC_INDEX, 0xBA16,
  245.  
  246.     VRS_END,
  247. };
  248.  
  249. int vrs360x350x256planar[] = {
  250. //
  251. // switch to linear, non-chain4 mode
  252. //
  253.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  254.     VRS_BYTE_OUT, SC_DATA,  1,
  255.  
  256.     VRS_WORD_OUT, SC_INDEX, 0x0604,
  257.     VRS_BYTE_OUT, MISC_OUTPUT, 0xA7,    // 350-scan-line scan rate
  258.  
  259.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  260.     VRS_BYTE_OUT, SC_DATA,  3,
  261.  
  262. //
  263. // unprotect CRTC0 through CRTC0
  264. //
  265.     VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  266.     VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  267.  
  268. //
  269. // stop scanning each line twice
  270. //
  271.     VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  272.     VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  273.  
  274. //
  275. // change the CRTC from doubleword to byte mode
  276. //
  277.     VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  278.     VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  279.     VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  280.     VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  281.  
  282. //
  283. // set the vertical counts for 350-scan-line mode and 360 pixels across
  284. //
  285.     VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  286.     VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  287.     VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  288.     VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  289.     VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  290.     VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  291.     VRS_WORD_OUT, CRTC_INDEX, 0xBF06,
  292.     VRS_WORD_OUT, CRTC_INDEX, 0x1F07,
  293.     VRS_WORD_OUT, CRTC_INDEX, 0x8310,
  294.     VRS_WORD_OUT, CRTC_INDEX, 0x8511,
  295.     VRS_WORD_OUT, CRTC_INDEX, 0x5D12,
  296.     VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  297.     VRS_WORD_OUT, CRTC_INDEX, 0x6315,
  298.     VRS_WORD_OUT, CRTC_INDEX, 0xBA16,
  299.  
  300.     VRS_END,
  301. };
  302.  
  303. int vrs320x400x256planar[] = {
  304. //
  305. // switch to linear, non-chain4 mode
  306. //
  307.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  308.     VRS_BYTE_OUT, SC_DATA,  1,
  309.  
  310.  
  311.     VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  312.     VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  313.     VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  314.     VRS_BYTE_RMW, GC_DATA, ~0x10, 0x00,
  315.     VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  316.     VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  317.  
  318.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  319.     VRS_BYTE_OUT, SC_DATA,  3,
  320.  
  321. //
  322. // stop scanning each line twice
  323. //
  324.     VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  325.     VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  326.  
  327. //
  328. // change the CRTC from doubleword to byte mode
  329. //
  330.     VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  331.     VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  332.     VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  333.     VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  334.  
  335.     VRS_END,
  336. };
  337.  
  338. int vrs360x400x256planar[] = {
  339. //
  340. // switch to linear, non-chain4 mode
  341. //
  342.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  343.     VRS_BYTE_OUT, SC_DATA,  1,
  344.  
  345.     VRS_WORD_OUT, SC_INDEX, 0x0604,
  346.     VRS_BYTE_OUT, MISC_OUTPUT, 0x67,
  347.  
  348.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  349.     VRS_BYTE_OUT, SC_DATA,  3,
  350.  
  351. //
  352. // unprotect CRTC0 through CRTC0
  353. //
  354.     VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  355.     VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  356.  
  357. //
  358. // stop scanning each line twice
  359. //
  360.     VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  361.     VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  362.  
  363. //
  364. // change the CRTC from doubleword to byte mode
  365. //
  366.     VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  367.     VRS_BYTE_RMW, CRTC_DATA,  ~0x40, 0x00,
  368.     VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  369.     VRS_BYTE_RMW, CRTC_DATA,  ~0x00, 0x40,
  370.  
  371. //
  372. // set up the CRT Controller
  373. //
  374.     VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  375.     VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  376.     VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  377.     VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  378.     VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  379.     VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  380.     VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  381.  
  382.     VRS_END,
  383. };
  384.  
  385. int vrs320x480x256planar[] = {
  386. //
  387. // switch to linear, non-chain4 mode
  388. //
  389.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  390.     VRS_BYTE_OUT, SC_DATA,  1,
  391.  
  392.     VRS_BYTE_OUT, SC_INDEX, MEMORY_MODE,
  393.     VRS_BYTE_RMW, SC_DATA, ~0x08, 0x04,
  394.     VRS_BYTE_OUT, GC_INDEX, GRAPHICS_MODE,
  395.     VRS_BYTE_RMW, GC_DATA, ~0x10, 0x00,
  396.     VRS_BYTE_OUT, GC_INDEX, MISCELLANOUS,
  397.     VRS_BYTE_RMW, GC_DATA, ~0x02, 0x00,
  398.  
  399.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  400.     VRS_BYTE_OUT, SC_DATA,  3,
  401.  
  402. //
  403. // unprotect CRTC0 through CRTC0
  404. //
  405.     VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  406.     VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  407.  
  408. //
  409. // stop scanning each line twice
  410. //
  411.     VRS_BYTE_OUT, CRTC_INDEX, MAX_SCAN_LINE,
  412.     VRS_BYTE_RMW, CRTC_DATA, ~0x1F, 0x00,
  413.  
  414. //
  415. // change the CRTC from doubleword to byte mode
  416. //
  417.     VRS_BYTE_OUT, CRTC_INDEX, UNDERLINE,
  418.     VRS_BYTE_RMW, CRTC_DATA, ~0x40, 0x00,
  419.     VRS_BYTE_OUT, CRTC_INDEX, MODE_CONTROL,
  420.     VRS_BYTE_RMW, CRTC_DATA, ~0x00, 0x40,
  421.  
  422. //
  423. // set up the CRT Controller
  424. //
  425.     VRS_WORD_OUT, CRTC_INDEX, 0x0D06,
  426.     VRS_WORD_OUT, CRTC_INDEX, 0x3E07,
  427.     VRS_WORD_OUT, CRTC_INDEX, 0xEA10,
  428.     VRS_WORD_OUT, CRTC_INDEX, 0xAC11,
  429.     VRS_WORD_OUT, CRTC_INDEX, 0xDF12,
  430.     VRS_WORD_OUT, CRTC_INDEX, 0xE715,
  431.     VRS_WORD_OUT, CRTC_INDEX, 0x0616,
  432.  
  433.     VRS_END,
  434. };
  435.  
  436. int vrs360x480x256planar[] = {
  437. //
  438. // switch to linear, non-chain4 mode
  439. //
  440.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  441.     VRS_BYTE_OUT, SC_DATA,  1,
  442.  
  443.     VRS_WORD_OUT, SC_INDEX, 0x0604,
  444.     VRS_BYTE_OUT, MISC_OUTPUT, 0xE7,
  445.  
  446.     VRS_BYTE_OUT, SC_INDEX, SYNC_RESET,
  447.     VRS_BYTE_OUT, SC_DATA,  3,
  448.  
  449. //
  450. // unprotect CRTC0 through CRTC0
  451. //
  452.     VRS_BYTE_OUT, CRTC_INDEX, 0x11,
  453.     VRS_BYTE_RMW, CRTC_DATA, ~0x80, 0x00,
  454.  
  455. //
  456. // set up the CRT Controller
  457. //
  458.     VRS_WORD_OUT, CRTC_INDEX, 0x6B00,
  459.     VRS_WORD_OUT, CRTC_INDEX, 0x5901,
  460.     VRS_WORD_OUT, CRTC_INDEX, 0x5A02,
  461.     VRS_WORD_OUT, CRTC_INDEX, 0x8E03,
  462.     VRS_WORD_OUT, CRTC_INDEX, 0x5E04,
  463.     VRS_WORD_OUT, CRTC_INDEX, 0x8A05,
  464.     VRS_WORD_OUT, CRTC_INDEX, 0x0D06,
  465.     VRS_WORD_OUT, CRTC_INDEX, 0x3E07,
  466.     VRS_WORD_OUT, CRTC_INDEX, 0x4009,
  467.     VRS_WORD_OUT, CRTC_INDEX, 0xEA10,
  468.     VRS_WORD_OUT, CRTC_INDEX, 0xAC11,
  469.     VRS_WORD_OUT, CRTC_INDEX, 0xDF12,
  470.     VRS_WORD_OUT, CRTC_INDEX, 0x3013,
  471.     VRS_WORD_OUT, CRTC_INDEX, 0x0014,
  472.     VRS_WORD_OUT, CRTC_INDEX, 0xE715,
  473.     VRS_WORD_OUT, CRTC_INDEX, 0x0616,
  474.     VRS_WORD_OUT, CRTC_INDEX, 0xE317,
  475.  
  476.     VRS_END,
  477. };
  478.  
  479. //
  480. // extra VGA-specific data for vgavidmodes
  481. //
  482. vextra_t    extra320x200x256linear = {
  483.     1, vrsnull
  484. };
  485. vextra_t    extra320x200x256planar = {
  486.     1, vrs320x200x256planar
  487. };
  488. vextra_t    extra360x200x256planar = {
  489.     1, vrs360x200x256planar
  490. };
  491. vextra_t    extra320x240x256planar = {
  492.     1, vrs320x240x256planar
  493. };
  494. vextra_t    extra360x240x256planar = {
  495.     1, vrs360x240x256planar
  496. };
  497. vextra_t    extra320x350x256planar = {
  498.     1, vrs320x350x256planar
  499. };
  500. vextra_t    extra360x350x256planar = {
  501.     1, vrs360x350x256planar
  502. };
  503. vextra_t    extra320x400x256planar = {
  504.     1, vrs320x400x256planar
  505. };
  506. vextra_t    extra360x400x256planar = {
  507.     1, vrs360x400x256planar
  508. };
  509. vextra_t    extra320x480x256planar = {
  510.     1, vrs320x480x256planar
  511. };
  512. vextra_t    extra360x480x256planar = {
  513.     1, vrs360x480x256planar
  514. };
  515.  
  516. //
  517. // base mode descriptors, in ascending order of number of pixels
  518. //
  519.  
  520. vmode_t    vgavidmodes[] = {
  521. {
  522.     NULL,
  523.     "320x200", "    ***** standard VGA modes *****    ",
  524.     320, 200, (200.0/320.0)*(320.0/240.0), 320, 0, 1, &extra320x200x256linear,
  525.     VGA_InitMode, VGA_SwapBuffers, VGA_SetPalette,
  526.     VGA_BeginDirectRect, VGA_EndDirectRect
  527. },
  528. {
  529.     NULL,
  530.     "320x200", "    ***** Mode X-style modes *****    ",
  531.     320, 200, (200.0/320.0)*(320.0/240.0), 320, 1, 1, &extra320x200x256planar,
  532.     VGA_InitMode, VGA_SwapBuffers, VGA_SetPalette,
  533.     VGA_BeginDirectRect, VGA_EndDirectRect
  534. },
  535. {
  536.     NULL,
  537.     "360x200", NULL, 360, 200, (200.0/360.0)*(320.0/240.0),
  538.     384, 1, 1, &extra360x200x256planar, VGA_InitMode,
  539.     VGA_SwapBuffers, 
  540.     VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  541. },
  542. {
  543.     NULL,
  544.     "320x240", NULL, 320, 240, (240.0/320.0)*(320.0/240.0),
  545.     320, 1, 1, &extra320x240x256planar, VGA_InitMode,
  546.     VGA_SwapBuffers, 
  547.     VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  548. },
  549. {
  550.     NULL,
  551.     "360x240", NULL, 360, 240, (240.0/360.0)*(320.0/240.0),
  552.     384, 1, 1, &extra360x240x256planar,
  553.     VGA_InitMode, VGA_SwapBuffers, VGA_SetPalette,
  554.     VGA_BeginDirectRect, VGA_EndDirectRect
  555. },
  556. {
  557.     NULL,
  558.     "320x350", NULL, 320, 350, (350.0/320.0)*(320.0/240.0),
  559.     320, 1, 1, &extra320x350x256planar, VGA_InitMode,
  560.     VGA_SwapBuffers, 
  561.     VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  562. },
  563. {
  564.     NULL,
  565.     "360x350", NULL, 360, 350, (350.0/360.0)*(320.0/240.0),
  566.     384, 1, 1, &extra360x350x256planar, VGA_InitMode,
  567.     VGA_SwapBuffers, 
  568.     VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  569. },
  570. {
  571.     NULL,
  572.     "320x400", NULL, 320, 400, (400.0/320.0)*(320.0/240.0), 320,
  573.     1, 1, &extra320x400x256planar, VGA_InitMode,
  574.     VGA_SwapBuffers, 
  575.     VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  576. },
  577. {
  578.     NULL,
  579.     "360x400", NULL, 360, 400, (400.0/360.0)*(320.0/240.0),
  580.     384, 1, 1, &extra360x400x256planar, VGA_InitMode,
  581.     VGA_SwapBuffers, 
  582.     VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  583. },
  584. {
  585.     NULL,
  586.     "320x480", NULL, 320, 480, (480.0/320.0)*(320.0/240.0),
  587.     320, 1, 1, &extra320x480x256planar, VGA_InitMode,
  588.     VGA_SwapBuffers, 
  589.     VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  590. },
  591. {
  592.     NULL,
  593.     "360x480", NULL, 360, 480, (480.0/360.0)*(320.0/240.0),
  594.     384, 1, 1, &extra360x480x256planar, VGA_InitMode,
  595.     VGA_SwapBuffers, 
  596.     VGA_SetPalette, VGA_BeginDirectRect, VGA_EndDirectRect
  597. },
  598. };
  599.  
  600.